#ifndef __esapi_h__
#define __esapi_h__

#include "stm32f10x.h"
#include "misc.h"
#include "config.h"

//OS inc
#ifdef __USING_OS__
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#endif

/*
ES系统全局API函数
*/




//类型定义
typedef volatile unsigned long long vu64;
typedef unsigned long long u64;
typedef enum { FALSE = 0, TRUE = !FALSE }BOOL;

//systick中断回调函数
typedef void(*systick_callback)(void);



//宏定义
#define NULL 0






/*
debug函数部分
*/

//不管debug与否都输出
#define trace(msg) print(msg)



//只有debug才输出
#ifdef __ES_DEBUG__
#define debug(msg) print(msg)
#else
#define debug(msg)
#endif








/* 系统时钟部分 */

//注意中断响应函数SysTick_Handler已在esapi.cpp中定义，stm32f10x_it.c中如果有对应函数必需删除



//SysTick初始化(初始化后自动开始计时) -- 使用OS时不需要设置
/*
f=72 000 000
dt=1/f
T = ticks*dt = tick*(1/f)

ticks=SystemCoreClock/1000000		//1us
ticks=SystemCoreClock/1000		//1ms

默认为1ms,最大值为0xFFFFFFul

callback:systick中断回调函数指针(默认为NULL)
*/
void InitSysTick(u32 ticks = SystemCoreClock / 1000, systick_callback callback = NULL);



//获取从系统启动开始所经过的tick计数(tick的单位由InitSysTick时确定,默认为1ms)
u64 GetTickCount(void);


/* end of 系统时钟部分 */

//堵塞式延时
//延迟ms(循环式)
void delay_ms(u16 t);
//延迟us(循环式)
void delay_us(u16 t);

//串口输出字符串,需在project中定义。
void print(char*);
void print(u8* buf, int len);





//睡眠,使用OS时调用os api,不使用os时堵塞延时
void Sleep(u32 ms);



/************************************************************************/
/* OS部分                                                               */
/************************************************************************/
#ifdef __USING_OS__
//创建线程
void CreateThread(TaskFunction_t runnable, void* param, u32 priority, u16 stact_size = configMINIMAL_STACK_SIZE);


//启动所有线程
void ThreadsStart();

#endif


#endif

